package cn.gok.utils;


import cn.gok.common.enums.ResultEnum;
import cn.gok.common.resp.PageResult;
import cn.gok.common.resp.Result;
import com.github.pagehelper.PageInfo;

/**
 * @author: DxlinY
 * @apiNote: 通用统一返回结果类工具类
 * @date: 2020/9/17
 * @time: 16:30
 */
public class ResultUtil {

    public ResultUtil() {

    }

    /**
     * 通用指定信息返回结果
     *
     * @param code 指定状态码
     * @param msg  指定状态信息
     * @param data 指定数据
     * @return Result
     */
    public static Result info(int code, String msg, Object data) {
        return new Result(code, msg, data);
    }


    /**
     * 统一成功通常用信息返回结果
     *
     * @param data 指定数据
     * @return Result
     */
    public static Result success(Object data) {
        return info(ResultEnum.SYSTEM_NORMAL_SUCCESS, data);
    }

    /**
     * 统一失败通常用信息返回结果
     *
     * @param data 指定数据
     * @return Result
     */
    public static Result error(Object data) {
        return info(ResultEnum.SYSTEM_UNKNOWN_ERROR, data);
    }

    /**
     * 登录成功统一返回用结果
     *
     * @param data 指定数据
     * @return Result
     */
    public static Result loginSuccess(Object data) {
        return info(ResultEnum.LOGIN_SUCCESS, data);
    }

    /**
     * 用户名或密码错误错误返回结果类
     *
     * @param data 指定数据
     * @return Result
     */
    public static Result loginFailed(Object data) {
        return info(ResultEnum.LOGIN_FAILED, data);
    }

    /**
     * 登录用户不存在错误返回结果类
     *
     * @param data 指定数据
     * @return Result
     */
    public static Result unknownUser(Object data) {
        return info(ResultEnum.LOGIN_UNKNOWN_USER, data);
    }


    /**
     * 上传图片超过要求
     *
     * @return Result
     */
    public static Result imageTooBig() {
        return info(ResultEnum.SYSTEM_IMAGE_TOO_BIG, null);
    }

    /**
     * 密码错误返回结果类
     *
     * @param data 指定数据
     * @return Result
     */
    public static Result passwordError(Object data) {
        return info(ResultEnum.LOGIN_PASSWORD_ERROR, data);
    }

    /**
     * 用户不存在
     *
     * @return
     */
    public static Result userNotFound() {
        return info(ResultEnum.LOGIN_UNKNOWN_USER.getCode(), ResultEnum.LOGIN_UNKNOWN_USER.getMsg(), null);
    }

    /**
     * 用户不存在
     *
     * @return
     */
    public static Result dataNotFound() {
        return info(ResultEnum.SYSTEM_DATA_NOT_FOUND.getCode(), ResultEnum.SYSTEM_DATA_NOT_FOUND.getMsg(), null);
    }

    /**
     * 用户无权限访问
     *
     * @return
     */
    public static Result hasNotPermission() {
        return info(ResultEnum.NOT_PERMISSION.getCode(), ResultEnum.NOT_PERMISSION.getMsg(), null);
    }

    /**
     * layui分页统一返回结果
     *
     * @param pageInfo pageHelp对象
     * @return
     */
    public static PageResult pageInfo(PageInfo pageInfo) {
        return new PageResult(success(pageInfo.getList()), pageInfo.getTotal());
    }


    private static Result info(ResultEnum resultEnum, Object data) {
        return new Result(resultEnum.getCode(), resultEnum.getMsg(), data);
    }
}
